package com.tianji.promotion.domain.utils.annotation;

import com.tianji.promotion.domain.utils.MyLockStrategy;
import com.tianji.promotion.enums.MyLockType;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;
/**
 * 自定义锁注解
 * @author Yandel
 *  @date 2025-8-18 20:15:05
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyLock {
    // 锁的名称
    String name();
    // 设置获取锁的最大等待时间
    long waitTime() default 1;

    //设置锁的持有时间（租约时间），超过该时间锁会自动释放，
    // -1表示不自动释放（永久持有直到手动释放
    long leaseTime() default -1;
    //定义 waitTime 和 leaseTime 的时间单位，默认为秒
    TimeUnit unit() default TimeUnit.SECONDS;

    //指定锁的类型
    MyLockType lockType() default MyLockType.RE_ENTRANT_LOCK;

    //指定锁的策略
    MyLockStrategy  lockStrategy() default MyLockStrategy.FAIL_AFTER_RETRY_TIMEOUT;
}